﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Ccit.ClassLibrary;

namespace Ccit.SysPlat.Organ
{
    /// <summary>
    /// Description: 系统平台组织机构 -> 部门管理接口
    /// Author: tim 2010-01-29
    /// </summary>
    public interface IDept
    {
        /// <summary>
        /// 获取部门信息
        /// </summary>
        /// <param name="deptId">部门Id</param>
        /// <param name="isContainExtend">
        /// 是否包含部门扩展信息,扩展信息包含:
        ///   【1】: 所属机构
        ///   【2】: 部门下人员        
        /// </param>
        /// <returns></returns>
        MsDept GetDeptInfo(string deptId, eTrueFalse isContainExtend);

        /// <summary>
        /// 保存部门信息
        /// </summary>
        /// <param name="msDept">部门消息对象</param>        
        /// <returns></returns>
        List<string> Save(MsDept msDept);

        /// <summary>
        /// 获取机构下的一级部门集合
        /// </summary>
        /// <param name="organId">机构Id</param>
        /// <returns></returns>
        List<MsDept> GetStairDeptList(string organId);


        /// <summary>
        /// 获取当前部门的下一级子部门集合
        /// </summary>
        /// <param name="deptId">当前部门Id</param>
        /// <param name="organId">当前机构Id</param>
        /// <returns></returns>
        List<MsDept> GetSubDeptList(string deptId,string organId);

        /// <summary>
        /// 部门删除
        /// </summary>
        /// <param name="deptId">部门Id</param>
        /// <returns></returns>
        List<string> Delete(string deptId);

        /// <summary>
        /// 获取从当前部门开始的所有上级部门Id串(包含当前部门)
        /// </summary>
        /// <param name="deptId">当前部门Id</param>
        /// <returns></returns>
        string GetDeptLevelStruct(string deptId);

        /// <summary>
        /// 按部门层级结构(即前导缩进)的形式获取机构下的所有有效的部门信息
        /// </summary>
        /// <param name="organId">机构Id</param>
        /// <param name="filterDeptId">过滤掉的部门Id(同时过滤掉部门下的所有子部门)</param>
        /// <returns></returns>
        List<MsKeyValue> GetALLDepts(string organId,string filterDeptId);

        /// <summary>
        /// 校验本机构下的部门是否同名
        /// </summary>
        /// <param name="deptId">部门Id</param>
        /// <param name="deptName">部门名称</param>
        /// <param name="organId">机构Id</param>
        /// <returns></returns>
        bool IsExistSameName(string deptId, string deptName, string organId);

        
        /// <summary>
        /// 根据部门Id串返回部门名称串
        /// </summary>
        /// <param name="deptIds">逗号分隔的部门Id串</param>
        /// <param name="separator">返回的部门名称间的分隔符</param>        
        /// <returns></returns>
        string GetDeptNamesByIds(string deptIds, string separator);

        /// <summary>
        /// 根据部门Id串返回部门名称串
        /// </summary>
        /// <param name="deptIds">逗号分隔的部门Id串</param>
        /// <param name="separator">返回的部门名称间的分隔符</param>
        /// <returns></returns>
        string GetDeptNamesByIds(string deptIds, string separator, eTrueFalse isFilter);


        /// <summary>
        /// 根据部门Id串返回部门记录名-值对儿字典集合
        /// </summary>
        /// <param name="deptIds">部门Id串</param>
        /// <param name="findDeptName">模糊查询部门名称</param>
        /// <returns></returns>
        List<MsKeyValue> GetDeptListByIds(string deptIds,string findDeptName);

        /// <summary>
        /// 获取机构下的部门记录名-值对儿字典集合
        /// </summary>
        /// <param name="organId">机构Id</param>
        /// <param name="filterDeptIds">过滤掉的部门记录Id串</param>        
        /// <param name="findDeptName">模糊查询部门名称</param>  
        /// <returns></returns>
        List<MsKeyValue> GetDeptListByOrgan(string organId, string filterDeptIds,string findDeptName);

        /// <summary>
        /// 根据传入的部门Id串，获取所有传入部门的所有下级子部门Id链接传入的部门Id一起以逗号分隔串的形式返回
        /// </summary>
        /// <param name="deptIds">部门Id串</param>
        /// <returns></returns>
        string findALLDeptIds(string deptIds);


        /// <summary>
        /// 获取机构下的一级部门集合
        /// (其中的hasChild属性根据部门下是否有子部门或者是否有用户，双重条件来判断)
        /// </summary>
        /// <param name="organId">机构Id</param>
        /// <returns></returns>
        List<MsDept> GetStairDeptListForMobile(string organId);

        /// <summary>
        /// 获取当前部门的下一级子部门集合
        /// (其中的hasChild属性根据部门下是否有子部门或者是否有用户，双重条件来判断)
        /// </summary>
        /// <param name="deptId">当前部门Id</param>
        /// <param name="organId">当前机构Id</param>
        /// <returns></returns>
        List<MsDept> GetSubDeptListForMobile(string deptId, string organId);
    }
}
